/* --------------------------- (C) COPYRIGHT 2021 Fortiortech ShenZhen -----------------------------
    File Name      : Customer.h
    Author         : Fortiortech  Appliction Team
    Version        : V1.0
    Date           : 2021-04-10
    Description    : This file contains customer parameter used for Motor Control.
----------------------------------------------------------------------------------------------------
                                       All Rights Reserved
------------------------------------------------------------------------------------------------- */
/* Define to prevent recursive inclusion --------------------------------------------------------*/
#ifndef __CUSTOMER_H_
#define __CUSTOMER_H_

/*芯片参数值-------------------------------------------------------------------*/
/*PWM Parameter*/
#define PWM_FREQUENCY                  (16.0)                                  // (kHz) 载波频率

/*deadtime Parameter*/
#define PWM_DEADTIME                   (1.2)                                   // (us) 死区时间2

/*single resistor sample Parameter*/
#define MIN_WIND_TIME                   (PWM_DEADTIME+1.5)                      // (us) 单电阻最小采样窗口，建议值死区时间+0.9us

/*电机参数值,自适应观测器不需要Ke------------------------------------------------------*/
#define     R                           (1.0)  //                                          // 相电感对应系数值    
#define     Pole_Pairs                  (26.0)                                            // 极对数
#define     RS                          (1.5*1.0)//(1.3 * 1.0)                          // 电机相电阻/2, ohm  0.49

#define     LD                          (0.0041*1.0)                                   // D轴电机相电感/2,H  0.00091
#define     LQ                          (0.0076*1.0)                                   // Q轴电机相电感/2,H

#define     KeVpp                       (22.70)                                            // (V) 反电动势测量的峰峰值 7.7
#define     KeT                         (82.0)                                           // (ms)反电动势测量的周期   54.0
#define     Ke                          (1.0*Pole_Pairs * KeVpp * KeT / 207.84)          // (V/KRPM) 反电动势常数	5*62*55.6/207.84=82.93V

#define MOTOR_SPEED_BASE               (1200.0)                                        // (RPM) 速度基准

/*硬件板子参数设置值/*-----------------------------------------------------*/
/*根据驱动芯片的类型选择，High_Level || Low_Level || UP_H_DOWN_L || UP_L_DOWN_H ;6865为High_Level */
#define PWM_Level_Mode                 (High_Level)

/*电机电流采样相关硬件参数*/
#define HW_RSHUNT                      (0.02)                                  // (Ω)  采样电阻
#define HW_ADC_VREF                    (VREF4_5)                               // (V)  ADC参考电压 VREF5_0 = 5v ; VREF4_5 = 4.5v;
#define HW_AMPGAIN                     (5.1)                                   // 运放放大倍数

/* 基准电压VREF对外输出使能 */
#define     VREF_OUT_EN                 (1)

/* VHALF输出使能 */
#define     VHALF_OUT_EN                (1)
/*电机驱动母线电压采样相关硬件参数*/
#define RV1                            (470.0)                                  // (kΩ) 母线电压分压电阻1
#define RV2                            (470.0)                                   // (kΩ) 母线电压分压电阻2
#define RV3                            (5.1)                                   // (kΩ) 母线电压分压电阻3
#define VC1                            (1.0)                                   // 电压补偿系数
#define RV                             ((RV1 + RV2 + RV3) / RV3)               // 分压比
/*------------------------------------------------------------------------------*/

/*时间设置值-------------------------------------------------------------------*/
#define Charge_Time                    (100)                                    // (ms) 预充电时间，单位：ms
#define Align_Time                     (80)                                     // (ms) 预定位时间，单位：ms

/*顺逆风参数设置----------------------------------------------------------------*/
#define TailWind_Time                   (120)                                   // (ms) 顺逆风检测时间90
#define ATO_BW_Wind                     (10)                                  // 逆风判断观测器带宽的滤波值，经典值为8.0-100.0
#define SPD_BW_Wind                     (25.0)                                 // 逆风判断速度带宽的滤波值，经典值为5.0-40.0
/**逆风顺风状态下的KP、KI****/
#define DQKP_TailWind                   _Q12(0.5)                              //_Q12(1.0)-PLL , _Q12(1.5)-smo
#define DQKI_TailWind                   _Q15(0.01)                             //_Q15(0.08)-PLL ,_Q15(0.2)-smo

/*顺风启动电流值*/
#define IQ_TailWind_CURRENT            I_Value(1.0)                           // (A) Q轴运行电流
/*-----------------------------------------------------*/

/*启动参数参数值----------------------------------------------------------------*/
#define AlignTestMode                   (0)                                    // 预定位测试模式
#define Align_Angle                     (30.0)                                // (°) 预定位角度

/***预定位的Kp、Ki****/
#define DQKP_Alignment                 _Q12(1.0)                               // 预定位的KP
#define DQKI_Alignment                 _Q15(0.01)                              // 预定位的KI
#define ID_Align_CURRENT               I_Value(0.0)                            // (A) D轴定位电流
#define IQ_Align_CURRENT               I_Value(0.7)                            // (A) Q轴定位电流

/***静止启动电流****/
#define ID_Start_CURRENT               I_Value(0.0)                            // (A) D轴启动电流
#define IQ_Start_CURRENT               I_Value(1.5)                           // (A) Q轴启动电流12		空载0.7
/***运行电流****/
#define ID_RUN_CURRENT                 I_Value(0.0)                           // (A) D轴运行电流
#define IQ_RUN_CURRENT                 I_Value(2.0)                           // (A) Q轴运行电流14		空载1.0

//母线电流的阈值
#define BUS_CURRENT_LIMIT_OFFSET			 I_Value_CT(1)
#define BUS_CURRENT_LIMIT							(7000)//I_Value_CT(8)
#define BUS_CURRENT_LIMIT_MAX					(14586)//(15130)//(14620)//(14586)//(16500)//(14586)//I_Value_CT(12.0) 14586---14.5A

/*************Omega启动的参数***************/
#define ATO_BW                         (0.1)//(100.0)                                 // 观测器带宽的滤波值，经典值为1.0-200.0

#define ATO_BW_RUN                     (1.0)//(100.0) 10
#define ATO_BW_RUN1                    (2.0)//(250.0)20
#define ATO_BW_RUN2                    (10.0)//(300.0)30
#define ATO_BW_RUN3                    (50.0)//(300.0)50
#define ATO_BW_RUN4                    (100.0)//(300.0)100

#define SPD_BW                         (25.0)                                  // 速度带宽的滤波值，经典值为5.0-40.0
/*转速参数值-------------------------------------------------------------------*/
/* motor start speed value */ 
//OMEGA启动参数
#define Motor_Omega_Ramp_ACC           (5.0)                                     // omega启动的增量   12
#define MOTOR_OMEGA_ACC_MIN            (20.0)                                // (RPM) omega启动的最小切换转速
#define MOTOR_OMEGA_ACC_END            (80.0)                                // (RPM) omega启动的限制转速

/* motor loop control speed value */
#define MOTOR_LOOP_RPM                 (70.0)                                // (RPM) 由mode 0到mode1切换转速，即闭环切换转速

/* motor run speed value */
//电机运行时最大最小转速、堵转保护转速
#define MOTOR_SPEED_SMOMIN_RPM         (50.0)                                // (RPM) SMO运行最小转速
#define MOTOR_SPEED_SMOMIN_RPM1        (50.0)
#define MOTOR_SPEED_MIN_RPM            (100.0)                                 // (RPM) 运行最小转速
#define MOTOR_SPEED_MAX_RPM            (500.0)                                // (RPM) 运行最大转速
#define MOTOR_SPEED_LIMIT_RPM          (500.0)
#define MOTOR_SPEED_STOP_RPM           (90.0)                                 // (RPM) 运行最小转速

/*************启动阶段KPKI******************/

#define DKP_START                            _Q12(1.0)                               // 运行DQ轴KP1		2.0
#define DKI_START                            _Q15(0.001)                             // 运行DQ轴KI			0.07
#define QKP_START                            _Q12(0.005)                               // 运行DQ轴KP1.5		2.5
#define QKI_START                            _Q15(0.0002)//(0.00022)                             // 运行DQ轴KI		0.00007		0.0005

/*******运行时的参数*****************/
/*电流环参数设置值--------------------------------------------------------------*/
#define DKP                            _Q12(1.0)                               // 运行DQ轴KP1		2.0
#define DKI                            _Q15(0.003)                             // 运行DQ轴KI			0.07
#define QKP                            _Q12(1.0)                               // 运行DQ轴KP1.5		2.5
#define QKI                            _Q15(0.01)                             // 运行DQ轴KI		0.00007		0.0005
/* D轴参数设置 */
#define DOUTMAX                        _Q15(0.99)                               // D轴最大限幅值，单位：输出占空比
#define DOUTMIN                        _Q15(-0.99)                              // D轴最小限幅值，单位：输出占空比
/* Q轴参数设置 */
#define QOUTMAX                        _Q15(0.99)                               // Q轴最大限幅值，单位：输出占空比
#define QOUTMIN                        _Q15(-0.99)                              // Q轴最小限幅值，单位：输出占空比

#define QOUTINC                        (2)                                     // Q轴电流增大步进值,开环控制时有效
#define QOUTMAXVALUE                   I_Value(3.2)                                  // (A) Q轴输出电流,开环控制相电流
/*外环参数设置值----------------------------------------------------------------*/
#define SPEED_LOOP_TIME                (10)                                      // (ms) 速度环调节周期 

#define SKP                            _Q12(0.5)                                // 外环KP   
#define SKI                            _Q15(0.01)                               // 外环KI
#define SKD                            _Q12(0.00)                               // 外环KD

#define SOUTMAX                        I_Value(10.0)                            // (A) 外环最大限幅值
#define SOUTMIN                        I_Value(2.0)                             // (A) 外环最小限幅值

#define SPEED_INC                      5                                       // 速度环增量
#define SPEED_DEC                      5										// 速度环减量

#define POWER_LIMIT                  	 5400    //功率限制 3000=750W  4000=992W  5000=1250W=431rpm

/* 电机开关机控制 -------------------------------------------------*/
/***PWM曲线模式选择 PosiPWMDUTY 正PWM  或 NegaPWMDUTY 负PWM ***/
#define PWMDUTY_Choose                 (NegaPWMDUTY)

/* pwm曲线开关机和最大最小占空比设置 */
#define OFFPWMDuty                     _Q15(0.05)                               // 关机PWM占空比，小于该占空比关机
#define ONPWMDuty                      _Q15(0.1)                               // 开机PWM占空比，大于该占空比时开机
#define MINPWMDuty                     _Q15(0.15)                               // 速度曲线上最小PWM占空比
#define MAXPWMDuty                     _Q15(0.90)                               // 速度曲线上最大PWM占空比

/*----------------------------------------------------------------*/
/*模式选择设置值 NormalRun 正常运行  IPMtest 测试模式-----------------*/
#define IPMState                       (NormalRun)

/*外环使能  OUTLoop_Disable 不使能  OUTLoop_Enable 使能*/
#define OUTLoop_Mode                   (OUTLoop_Enable)

/*外环选择功率环或速度环 SPEED_LOOP_CONTROL 速度环  POWER_LOOP_CONTROL 功率环 VOLTAGE_LOOP_CONTROL电压环*/
#define Motor_Speed_Control_Mode       (SPEED_LOOP_CONTROL)

/*  调速模式 NONEMODE-直接给定值，不调速 PWMMODE pwm调速  SREFMODE 电位器调速----- */
#define SPEED_MODE                     (PWMMODE)

/*估算器模式选择 SMO 或 PLL*/
#define EstimateAlgorithm              (SMO)

/*顺逆风判断使能设置 NoTailWind 没有顺逆风  TailWind 加顺逆风启动---*/
#define TailWind_Mode                  (TailWind)

/*顺逆风判断方法 RSDMethod RSD判断 FOCMethod FOC判断   */
#define FRDetectMethod                 (FOCMethod)

/*开环启动模式选择 Omega_Start 或 Open_Start*/
#define Open_Start_Mode                (Omega_Start)

/*电流采样模式:Single_Resistor 或 Double_Resistor 或 Three_Resistor*/
#define Shunt_Resistor_Mode            (Double_Resistor)

/*正反转: CW 正转 或 CCW 反转*/
#define IRMODE                         (CW)                                    //正反转模式，正转为0，反转为1

/******* 初始位置检查参数 **********/
#define PosCheckEnable                 (0)                                     // 初始位置使能 
#define InjectTime                     (Short_Inject)
#define Inject_On_Foc_Int_Cnt          (6.0)                                    //单位微妙 通三相的时间
#define Inject_Off_Foc_Int_Cnt         (10.0)                                   //单位微妙 通三相的时间

#define Inject_Step1_Voltage_Proportion   (32767*0.3)                           //小于等于Inject_Step2_Voltage_Proportion
#define Inject_Step2_Voltage_Proportion   (32767*0.3)                           //大于大于Inject_Step1_Voltage_Proportion

/******启停测试参数******/
#define StartONOFF_Enable              (0)
#define StartON_Time                   (2000)                                   // (ms) 启动运行时间
#define StartOFF_Time                  (2000)                                   // (ms) 停止时间

#define StopBrakeFlag                  (0)
#define StopWaitTime                   (200)                                    // (ms) 刹车等待时间

#define StopWaitTime1                  (3000)


#endif

